Playing
a Compact Disc Track
The following
example opens a CD audio device, plays the track specified by the bTrack
parameter, and closes the device after playback is complete.
// Plays a specified audio track using MCI_OPEN,
MCI_PLAY. Returns as
// soon as playback begins. The window procedure
function for the
// specified window will be notified when playback
is complete.
// Returns 0L on success; otherwise, returns an MCI
error code.
DWORD playCDTrack(HWND hWndNotify, BYTE bTrack)
{
UINT
wDeviceID;
DWORD
dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_SET_PARMS mciSetParms;
MCI_PLAY_PARMS mciPlayParms;
// Open
the CD audio device by specifying the device name.
mciOpenParms.lpstrDeviceType
= "cdaudio";
if
(dwReturn = mciSendCommand(NULL, MCI_OPEN,
MCI_OPEN_TYPE, (DWORD)(LPVOID) &mciOpenParms))
{
//
Failed to open device. Don't close it; just return error.
return
(dwReturn);
}
// The
device opened successfully; get the device ID.
wDeviceID
= mciOpenParms.wDeviceID;
// Set the
time format to track/minute/second/frame (TMSF).
mciSetParms.dwTimeFormat = MCI_FORMAT_TMSF;
if
(dwReturn = mciSendCommand(wDeviceID, MCI_SET,
MCI_SET_TIME_FORMAT, (DWORD)(LPVOID)
&mciSetParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return
(dwReturn);
}
// Begin
playback from the given track and play until the beginning
// of the
next track. The window procedure function for the parent
// window
will be notified with an MM_MCINOTIFY message when
//
playback is complete. Unless the play command fails, the window
//
procedure closes the device.
mciPlayParms.dwFrom = 0L;
mciPlayParms.dwTo
= 0L;
mciPlayParms.dwFrom = MCI_MAKE_TMSF(bTrack, 0, 0, 0);
mciPlayParms.dwTo = MCI_MAKE_TMSF(bTrack + 1, 0, 0, 0);
mciPlayParms.dwCallback = (DWORD) hWndNotify;
if
(dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,
MCI_FROM | MCI_TO | MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms))
{
mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);
return
(dwReturn);
}
return
(0L);
}
To specify a
position relative to a track on a compact disc, you must use the track/minute/second/frame
(TMSF) time format.